﻿/*
最多拦截导弹数 
Time Limit:1000MS  Memory Limit:32768K


Description:
某国为了防御敌国的导弹袭击，发展出一种导弹拦截系统。
但是这种导弹拦截系统有一个缺陷：虽然它能拦截任意高度的导弹，但是每拦截一发导弹，其拦截能力就下降到只能拦截上一次拦截的导弹高度。
某天，雷达捕捉到敌国的导弹来袭，导弹依次飞来，该拦截系统最多能拦截多少导弹呢？

Input:
输入若干组数据。
每组数据包括：导弹总个数（正整数<1000），导弹依次飞来的高度（雷达给出的高度数据是不大于30000的正整数，用空格分隔）。
若导弹个数为0，则处理结束。 
Output:
输出这套系统最多能拦截多少导弹。 
Sample Input:
8
3890  2070  1550  3000  2990  1700  1580  650
0
Sample Output:
6
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdlib>
using namespace std;
// struct functor
// {
// 	functor():{}
// 	unsigned operator()(const unsigned)
// 	{
// 
// 	}
// private:
// 	unsigned result;
// };

int main()
{
	for (unsigned n = 0; cin >> n && n;)
	{

		vector<unsigned> missiles, interceptors;
		missiles.reserve(n);
		interceptors.reserve(n);
		for (unsigned missile; n--; missiles.push_back(missile))
			cin >> missile;


		interceptors.push_back(1);


		typedef vector<unsigned>::size_type v_size;
		for (v_size i = 1, size = missiles.size(); i < size; i++)
		{
			unsigned maximum = 1;
			for (v_size j = 0; j < i; j++)
				if (missiles[i] <= missiles[j])
					if ((interceptors[j] + 1) >= maximum)
						maximum = interceptors[j] + 1;
			interceptors.push_back(maximum);
		}


		cout <<
			*max_element(interceptors.begin(), interceptors.end()) <<
			endl;
	}

	return EXIT_SUCCESS;
}